lodash cloneDeep vs immer

📅 2023. 03. 25

lodash/cloneDeep과 immer는 모두 JavaScript에서 불변 데이터 작업을 위해 사용되는 라이브러리이지만, 목적과 사용 사례가 다릅니다.

lodash/cloneDeep

lodash는 자바스크립트에서 널리 사용되는 유틸리티 라이브러리로, 여러 가지 유용한 함수를 제공하며, 그 중 하나가 cloneDeep입니다. cloneDeep 함수는 주어진 객체 또는 배열의 심층 복사본을 생성하여 복사본을 변경할 때 원본 데이터가 변경되지 않도록 보장합니다. 이 함수는 원본을 수정하지 않고 객체 또는 배열의 새 인스턴스를 만들어야 할 때 유용합니다.

장점

  • 사용 및 이해가 간단합니다.
  • lodash 라이브러리에서 cloneDeep 함수만 가져와서 독립적으로 사용할 수 있습니다.
  • 모든 객체 / 배열에서 동작합니다.

단점

  • 특히 크기가 크거나 깊게 중첩된 객체의 경우 속도가 느릴 수 있습니다.
  • 불변 데이터 구조를 처리하도록 특별히 설계되지 않았으므로 성능을 최적화하는 내장된 방법이 없습니다.

immer

immer는 불변 데이터 구조로 작업하기 위해 특별히 설계된 라이브러리입니다. 기본 상태를 취하는 생성 함수와 상태의 변경 사항을 설명하는 콜백 함수를 제공합니다. Immer는 프록시 메커니즘을 사용하여 변경 사항을 추적하고 업데이트된 새 상태를 생성합니다. 이 접근 방식을 사용하면 원래 상태가 수정되지 않은 상태로 유지되면서도 상태를 직접 변경하는 것처럼 보이는 코드를 작성할 수 있습니다.

장점

  • 불변 데이터 구조를 처리하는 데 최적화되어 있으므로 일반적으로 cloneDeep보다 빠릅니다.
  • 불변 데이터 작업을 위한 보다 직관적이고 간단한 구문을 제공합니다.
  • 변경 가능한 데이터로 작업하는 것처럼 보이는 코드를 작성할 수 있어 이해하기 쉽습니다.

단점

  • 불변 데이터 구조를 처리하기 위해 특별히 설계되었기 때문에 cloneDeep보다 유연성이 떨어집니다.
  • 프록시 기반 접근 방식에 익숙하지 않은 개발자는 이해하기 어려울 수 있습니다.

요약하자면, 간단한 깊은 복사 기능이 필요하다면 lodash/cloneDeep이 좋은 선택입니다. 그러나 복잡한 상태 관리 작업을 하거나 불변 데이터를 처리할 때 더 나은 성능이 필요하다면 immer가 더 적합한 선택입니다.